package day15;
//测试静态工厂模式
public class SimpleFactory {
    //根据传入参数，创建不同类型产品对象
    public static Product createObject(String type){
        Product p=null;
        switch (type){
            case "A":p=new ProductA();break;
            case "B":p=new ProductB();break;
            case "C":p=new ProductC();break;
        }
        return p;
    }
    public static Product createA(){
        //如果创建对象很复杂，可以继续添加代码逻辑
        return new ProductA();
    }
    public static Product createB(){
        //如果创建对象很复杂，可以继续添加代码逻辑
        return new ProductA();
    }
    public static Product createC(){
        //如果创建对象很复杂，可以继续添加代码逻辑
        return new ProductA();
    }
    public static void main(String[] args) {
        //使用静态工厂模式创建对象
        Product p1=createA();
        Product p2=createB();
        Product p3=createC();
        p1.product();
        p2.product();
        p3.product();
    }
}
//定义一些产品对象
interface Product{
    void product();
}

//具体产品A
class ProductA implements Product{
    public void product(){
        System.out.println("开始生成产品A");
    }
}
class ProductB implements Product{
    public void product(){
        System.out.println("开始生成产品B");
    }
}
class ProductC implements Product{
    public void product(){
        System.out.println("开始生成产品C");
    }
}

//测试工厂方法模式
interface MethodFactory{
    Product createObject();
}

//具体的工厂实现类A
class  FactoryA implements MethodFactory{
    public Product createObject() {
        return new ProductA();
    }
}
class  FactoryB implements MethodFactory{
    public Product createObject() {
        return new ProductB();
    }
}
class  FactoryC implements MethodFactory{
    public Product createObject() {
        return new ProductC();
    }

    public static void main(String[] args) {
        //使用商品A对象，就需要创建工厂A对象
       MethodFactory factoryA= new FactoryA();
       Product pA=factoryA.createObject();
        //使用商品B对象，就需要创建工厂B对象
        MethodFactory factoryB= new FactoryB();
        Product pB=factoryB.createObject();
        //使用商品C对象，就需要创建工厂C对象
        MethodFactory factoryC= new FactoryC();
        Product pC=factoryC.createObject();
        pA.product();
        pB.product();
        pC.product();
    }
}